package com.alog.senior.day17;

import java.util.concurrent.TimeUnit;

/**
 * @Auther: Ye Zhengdong
 * @Date: 2019/1/23 11:04
 * @Description:
 */
public class WaitNotiffy1 {
    private static int bz = 0;
    public static void main(String[] args) {
//        Object obj1 = new Object();
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                while (true){
//                    synchronized (obj1){
//                        if(bz <= 0){
//                            try {
//                                System.out.println("消费者--当前没有任务, 等待");
//                                obj1.wait();
//                            } catch (InterruptedException e) {
//                                e.printStackTrace();
//                            }
//
//                        }
//                        System.out.println("消费者--取到任务, bz:" + bz);
//                        bz--;
//                        try {
//                            TimeUnit.SECONDS.sleep(3);
//                        } catch (InterruptedException e) {
//                            e.printStackTrace();
//                        }
//                        System.out.println("消费者--执行完任务, bz:" + bz);
//                        obj1.notifyAll();
//                    }
//                }
//
//
//            }
//        }).start();
//
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                while (true){
//                    synchronized (obj1){
//                        if(bz > 0){
//                            try {
//                                System.out.println("生产者--已经有任务, 等待");
//                                obj1.wait();
//                            } catch (InterruptedException e) {
//                                e.printStackTrace();
//                            }
//
//                        }
//                        System.out.println("生产者--取到任务,bz:" + bz);
//                        bz++;
//                        try {
//                            TimeUnit.SECONDS.sleep(3);
//                        } catch (InterruptedException e) {
//                            e.printStackTrace();
//                        }
//                        System.out.println("生产者--生产完任务,bz:" + bz);
//                        obj1.notifyAll();
//                    }
//                }
//
//
//            }
//        }).start();
        Object obj1 = new Object();
        Runnable comsumer = new Runnable() {
            @Override
            public void run() {
                while (true){
                    synchronized (obj1){
                        System.out.println(Thread.currentThread().getName() + "--消费者--进入, bz:" + bz);
                        while(bz <= 0){
                            try {
                                System.out.println(Thread.currentThread().getName() + "--消费者--当前没有任务, 等待");
                                obj1.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                        }
                        System.out.println(Thread.currentThread().getName() + "--消费者--取到任务, bz:" + bz);
                        bz--;
                        try {
                            TimeUnit.SECONDS.sleep(1);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName() + "--消费者--执行完任务, bz:" + bz);
                        obj1.notifyAll();
                    }
                }
            }
        };
        Runnable producter = new Runnable() {
            @Override
            public void run() {
                while (true){
                    synchronized (obj1){
                        System.out.println(Thread.currentThread().getName() + "--生产者--进入,bz:" + bz);
                        while(bz > 0){
                            try {
                                System.out.println(Thread.currentThread().getName() + "--生产者--已经有任务, 等待");
                                obj1.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                        }
                        System.out.println(Thread.currentThread().getName() + "--生产者--取到任务,bz:" + bz);
                        bz++;
                        try {
                            TimeUnit.SECONDS.sleep(1);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName() + "--生产者--生产完任务,bz:" + bz);
                        obj1.notifyAll();
                    }
                }
            }
        };

        new Thread(comsumer).start();
        new Thread(comsumer).start();
        new Thread(comsumer).start();
        new Thread(comsumer).start();
        new Thread(comsumer).start();
        new Thread(producter).start();
        new Thread(producter).start();
        new Thread(producter).start();
        new Thread(producter).start();
        new Thread(producter).start();
    }
}
